//import javax.security.sasl.SaslClient;
//import java.util.Scanner;
//public class Test0510 {
//    public static void main (String[] args) {
//        Scanner sc=new Scanner (System.in);
//        System.out.println ("输入元素个数:");
//        int n=sc.nextInt ();
//        int []a=new int[n];
//        System.out.println ("输入数组:");
//        for(int i=0;i<n;i++){
//            a[i]=sc.nextInt ();
//        }
//        System.out.println ("输入要查找的数:");
//        int res=sc.nextInt ();
//        int l=0,r=n-1;
//        while (l<r){
//            int mid=l+r>>1;
//            if(a[mid]<=res){
//                l=mid+1;
//            }else{
//                r=mid;
//            }
//        }
//        System.out.println (l);
//    }
//}

//import java.util.Scanner;
//public class Test0510{
//    static  void merge(int []q,int l,int r){
//        if(l>=r){
//            return;
//        }
//        int mid=l+((r-l)>>1);
//        merge (q,l,mid);
//        merge(q,mid+1,r);
//        int []tmp=new int[r-l+1];
//        int i=l,j=mid+1,k=0;
//        while (i<mid && j<=r){
//            if(q[i]<=q[j]){
//                tmp[k++]=q[i++];
//            }else {
//                tmp[k++]=q[j++];
//            }
//        }
//        while (i<=mid){
//            tmp[k++]=q[i++];
//        }
//        while (j<=r){{
//            tmp[k++]=q[j++];
//        }}
//        for (i=l,j=0;i<=r;i++,j++){
//            q[i]=tmp[j];
//        }
//    }
//    public static void main (String[] args) {
//        Scanner sc=new Scanner (System.in);
//        int n=sc.nextInt ();
//        int []q=new int[n+10];
//        for (int i = 0 ; i <n  ; i++) {
//            q[i]=sc.nextInt ();
//        }
//        merge(q,0,n-1);
//        for (int i = 0 ; i < n ; i++) {
//            System.out.print (q[i]+" ");
//        }
//    }
//}

import java.util.Scanner;
public class Test0510{
    static  int [][]f=new int[1010][1010];
    static int n,m;

    public static void main (String[] args) {
        Scanner scanner=new Scanner (System.in);
        n=scanner.nextInt ();
        m= scanner.nextInt ();
        String a=scanner.next ();
        String b=scanner.next ();

        for (int i = 1 ; i <=n  ; i++) {
            for (int j = 1 ; j <=m  ; j++) {
                f[i][j]=Math.max (f[i-1][j],f[i][j-1]);
                if(a.charAt (i-1)==b.charAt (j-1)){
                    f[i][j]=Math.max (f[i][j],f[i-1][j-1]+1);
                }
            }
        }
        System.out.println (f[n][m]);
    }
}